/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.domain.gestion;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import co.gov.medellin.sdep.sisdep.common.AppConstants;
import co.gov.medellin.sdep.sisdep.common.OracleHelper;
import co.gov.medellin.sdep.sisdep.domain.BaseController;
import co.gov.medellin.sdep.sisdep.domain.MessageModalWindowController;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstAreaSocioeconoException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstAreaSocioeconoRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstAspecPoblacionalException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstAspecPoblacionalRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstCondViviendaException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstCondViviendaRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstOcupacionEpuException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstOcupacionEpuRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstSeguridadSocException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstSeguridadSocRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstSocioEconomicoException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstSocioEconomicoRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.SolicitudException;
import co.gov.medellin.sdep.sisdep.gestion.service.IEstAreaSocioeconoService;
import co.gov.medellin.sdep.sisdep.gestion.service.IEstAspecPoblacionalService;
import co.gov.medellin.sdep.sisdep.gestion.service.IEstCondViviendaService;
import co.gov.medellin.sdep.sisdep.gestion.service.IEstOcupacionEpuService;
import co.gov.medellin.sdep.sisdep.gestion.service.IEstSeguridadSocService;
import co.gov.medellin.sdep.sisdep.gestion.service.IEstSocioEconomicoService;
import co.gov.medellin.sdep.sisdep.gestion.service.ISolicitudService;
import co.gov.medellin.sdep.sisdep.integration.mapasmedellin.BeanDireccion;
import co.gov.medellin.sdep.sisdep.integration.mapasmedellin.GeoUbicacionClient;
import co.gov.medellin.sdep.sisdep.model.EstAreaSocioecono;
import co.gov.medellin.sdep.sisdep.model.EstAspecPoblacional;
import co.gov.medellin.sdep.sisdep.model.EstCondVivienda;
import co.gov.medellin.sdep.sisdep.model.EstOcupacionEpu;
import co.gov.medellin.sdep.sisdep.model.EstSeguridadSoc;
import co.gov.medellin.sdep.sisdep.model.comp.EstSocioEconomicoComp;
import co.gov.medellin.sdep.sisdep.model.comp.EstSocioEconomicoDetalleTO;
import co.gov.medellin.sdep.sisdep.model.comp.SolicitudComp;
/**
 * @author Usuario
 * 
 */
public class EstSocioEconomicoController extends BaseController implements
		Serializable {

	/**
	 * generated serial version
	 */
	private static final long serialVersionUID = -3285110767384990403L;

	/**
	 * Constructor por defecto, inicializa los elemento basicos del Controlador
	 */
	public EstSocioEconomicoController() {
		cleanSearchValues();
		cleanValues();
		this.estadoList = new ArrayList();
		this.estadoList.add(new SelectItem("N","NUEVO"));
		this.estadoList.add(new SelectItem("P","PENDIENTE"));
		this.estadoList.add(new SelectItem("A","ACTUALIZADO"));
		this.estadoList.add(new SelectItem("C","CERRADO"));
		

	}

	/** bean para el manejo del formulario de busqueda EstSocioEconomico */
	private EstSocioEconomicoComp estSocioEconomicoSearch = new EstSocioEconomicoComp();

	/** Objeto contenedor del listado de EstSocioEconomico luego de una consulta. */
	private DataModel estSocioEconomicoListModel;

	/** bean para el manejo del formulario de creacion/edicion. EstSocioEconomico */
	private EstSocioEconomicoComp estSocioEconomico = new EstSocioEconomicoComp();

	/** bean para el manejo del formulario EstSocioEconomico Detalle */
	EstSocioEconomicoDetalleTO estSocioEconomicoDetalle = new EstSocioEconomicoDetalleTO();

	/** instancia de servicio estSocioEconomicoService */
	private IEstSocioEconomicoService estSocioEconomicoService;
	
	/** instancia de servicio estSocioEconomicoService */
	private IEstCondViviendaService estCondViviendaService;

	/** instancia de servicio estSocioEconomicoService */
	private IEstAreaSocioeconoService estAreaSocioeconoService;

	/** instancia de servicio estOcupacionEpuService */
	private IEstOcupacionEpuService estOcupacionEpuService;
	
	/** instancia de servicio estSeguridadSocService */
	private IEstSeguridadSocService estSeguridadSocService;
	
	/** instancia de servicio estAspecPoblacionalService */
	private IEstAspecPoblacionalService estAspecPoblacionalService;
	
	/** estados del estudio socio economico */
	private List estadoList = null;	
	
	/** bean para el manejo de informacion basica de solicitud */
	private SolicitudComp solicitud = new SolicitudComp();

	/** instancia de servicio solicitudService */
	private ISolicitudService solicitudService; 
	
	private GeoUbicacionClient geoUbicacionClient;
	
	/** instancia un objeto de direccion local, en caso que el usuario no valide direccion al menos una vez */
	private BeanDireccion direccionLocal = new BeanDireccion();

	/** instancia un objeto de direccion local, en caso que el usuario no valide direccion al menos una vez */
	private BeanDireccion direccionResidencia = new BeanDireccion();

	// --------------------------------------------------------------------
	// --- metodos para atender acciones init()
	// --------------------------------------------------------------------

	/**
	 * 
	 * @return String
	 */
	public String initState() {
		cleanSearchValues();
		cleanValues();
		return AppConstants.EST_SOCIO_ECONOMICO_INIT_VIEW;
	}

	/**
	 * 
	 * @return String
	 */
	public String searchEstSocioEconomicoByKey() {
		String msg = "";
		try {
			List valores = null;
			valores = getEstSocioEconomicoService().load(1, 10,
					this.estSocioEconomicoSearch);
			this.estSocioEconomicoListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.estSocioEconomicoListModel.getWrappedData() == null) {
			msg = AppConstants.NO_RECORDS_FOUND;
		} else {
			if (((List) this.estSocioEconomicoListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		cleanSearchValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		return AppConstants.EST_SOCIO_ECONOMICO_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String create() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.estSocioEconomico.getId().longValue() == 0L) {
				getEstSocioEconomicoService().insert(this.estSocioEconomico);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (EstSocioEconomicoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstSocioEconomicoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Estudio Socio Econ\u00F3mico " + msg, null, null);
		return AppConstants.EST_SOCIO_ECONOMICO_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String update() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.estSocioEconomico.getId().longValue() != 0L) {
				getEstSocioEconomicoService().update(this.estSocioEconomico);
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (EstSocioEconomicoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstSocioEconomicoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Estudio Socio Econ\u00F3mico " + msg, null, null);
		return AppConstants.EST_SOCIO_ECONOMICO_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String saveEstudioSocioEconomicoDetalle() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.estSocioEconomico.getId().longValue() == 0L) {
				getEstSocioEconomicoService().insert(this.estSocioEconomico);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (EstSocioEconomicoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstSocioEconomicoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Estudio Socio Econ\u00F3mico " + msg, null, null);
		return AppConstants.EST_SOCIO_ECONOMICO_SEARCH_VIEW;
	}

	
	// --------------------------------------------------------------------
	// --- metodos para atender acciones end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion init()
	// --------------------------------------------------------------------

	/**
	 * redireccion a vista diligenciar estudio socio economico
	 */
	public String diligenciarGrupoFamiliar() {
		Map params = getExternalContext().getRequestParameterMap();
		String estSocioEconomicoDataIndex = (String) params
				.get("estSocioEconomicoDataIndex");
		this.estSocioEconomico = (EstSocioEconomicoComp) ((List) this.estSocioEconomicoListModel
				.getWrappedData())
				.get(Integer.parseInt(estSocioEconomicoDataIndex));
		
		//Se establece el objeto estudioSocioEconomico en session
		//para pasarlo a la vista que lo requiere de gestion de grupo
		//familiar
		sessionObjectRelease("estSocioEconomico");
		setSessionObject("estSocioEconomico", estSocioEconomico);
		return AppConstants.EST_SOCIO_ECONOMICO_GRUPO_FAMILIAR_FILL_VIEW;
	}
	
	/**
	 * redireccion a vista diligenciar estudio socio economico
	 */
	public String diligenciarEstSocioEconomico() {
		Map params = getExternalContext().getRequestParameterMap();
		String estSocioEconomicoDataIndex = (String) params
				.get("estSocioEconomicoDataIndex");
		this.estSocioEconomico = (EstSocioEconomicoComp) ((List) this.estSocioEconomicoListModel
				.getWrappedData())
				.get(Integer.parseInt(estSocioEconomicoDataIndex));
		
		//Consultamos los datos originales de la solicitud		
		try {
			this.solicitud = getSolicitudService().get(this.estSocioEconomico.getIdSolicitud().longValue());
		} catch (SolicitudException e) {
			e.printStackTrace();
		}
		
		//Verificar si esta llamada a la funcion si aplica...
		cleanSearchValues();
		
		//Inicializamos el valor para la opcion del paso 1 Datos Persona
		getEstSocioEconomicoDetalle().setOpcion("1");
		return AppConstants.EST_SOCIO_ECONOMICO_FILL_VIEW;
	}

	/**
	 * redireccion a vista diligenciar concepto socio economico
	 * @return
	 */
	public String diligenciarConceptoSocioEconomico() {
		Map params = getExternalContext().getRequestParameterMap();
		String estSocioEconomicoDataIndex = (String) params
				.get("estSocioEconomicoDataIndex");
		this.estSocioEconomico = (EstSocioEconomicoComp) ((List) this.estSocioEconomicoListModel
				.getWrappedData())
				.get(Integer.parseInt(estSocioEconomicoDataIndex));
		
		//Se establece el objeto estudioSocioEconomico en session
		//para pasarlo a la vista que lo requiere de concepto socio economico
		sessionObjectRelease("estSocioEconomico");
		setSessionObject("estSocioEconomico", estSocioEconomico);		
		return AppConstants.EST_CONCEPTO_SEARCH_VIEW;
	}
	

	/**
	 * redireccion a vista diligenciar concepto socio economico
	 * @return
	 */
	public String diligenciarVisitaAdministrativa() {
		Map params = getExternalContext().getRequestParameterMap();
		String estSocioEconomicoDataIndex = (String) params
				.get("estSocioEconomicoDataIndex");
		this.estSocioEconomico = (EstSocioEconomicoComp) ((List) this.estSocioEconomicoListModel
				.getWrappedData())
				.get(Integer.parseInt(estSocioEconomicoDataIndex));
		
		//Se establece el objeto estudioSocioEconomico en session
		//para pasarlo a la vista que lo requiere de visita domiciliaria
		sessionObjectRelease("estSocioEconomico");
		setSessionObject("estSocioEconomico", estSocioEconomico);
		return AppConstants.EST_VISITA_DOMICILIARIA_SEARCH_VIEW;
	}

	/**
	 * 
	 */
	public String createEstSocioEconomico() {
		estSocioEconomico = new EstSocioEconomicoComp();
		cleanValues();
		return AppConstants.EST_SOCIO_ECONOMICO_CREATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateEstSocioEconomico() {
		Map params = getExternalContext().getRequestParameterMap();
		String estSocioEconomicoDataIndex = (String) params
				.get("estSocioEconomicoDataIndex");
		this.estSocioEconomico = (EstSocioEconomicoComp) ((List) this.estSocioEconomicoListModel
				.getWrappedData())
				.get(Integer.parseInt(estSocioEconomicoDataIndex));
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_UPDATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String cancelEstSocioEconomico() {
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String cancelEstSocioEconomicoOpcion() {
		cleanValues();
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_MENU_VIEW;
	}

	/**
	 * limpia el contenido de los valores que se ingresan
	 */
	public final void cleanSearchValues(){
		this.estSocioEconomicoSearch.getSolicitud().setRadicado("");
		this.estSocioEconomicoSearch.setCodigo("");
		this.estSocioEconomicoSearch.setIdSolicitud(null);
		this.estSocioEconomicoSearch.setTipo("");
		this.estSocioEconomicoSearch.setEstado("");
	}

	/**
	 * limpia el contenido de los valores que se ingresan
	 */
	public final void cleanValues(){
		this.estSocioEconomico.setId(new Long(0L));
		this.estSocioEconomico.getSolicitud().setRadicado("");
		this.estSocioEconomico.setCodigo("");
		this.estSocioEconomico.setFechaIngreso(null);
		this.estSocioEconomico.setIdSolicitud(new Long(0L));
		this.estSocioEconomico.setTipo("");
		this.estSocioEconomico.setEstado("");
		this.estSocioEconomicoListModel = new ListDataModel();
	}
	
	
	
	/**
	 * 
	 * @return
	 */
	public String redirectCondVivienda() {
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_COND_VIVIENDA_VIEW;
	}

	
	/**
	 * 
	 * @return
	 */
	public String redirectAreaSocioeconomica() {
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_SOCIO_ECONOMICA_VIEW;
	}

	
	/**
	 * 
	 * @return
	 */
	public String redirectOcupacionEPU() {
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_OCUPACION_EPU_VIEW;
	}

	
	/**
	 * 
	 * @return
	 */
	public String redirectSeguridadSocial() {
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_SEGURIDAD_SOCIAL_VIEW;
	}

	
	/**
	 * 
	 * @return
	 */
	public String redirectAspecPoblacional() {
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_ASPECTO_POBLACIONAL_VIEW;
	}

	
	/**
	 * 
	 * @return
	 */
	public String redirectGrupoFamiliar() {
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_GRUPO_FAMILIAR_VIEW;
	}

	
	/**
	 * 
	 * @return
	 */
	public String redirectGrupoFamiliarDoc() {
		cleanSearchValues();
		return AppConstants.EST_SOCIO_ECONOMICO_GRUPO_FAMILIAR_DOC_VIEW;
	}
	
	public String checkAddress() {
		direccionLocal = getGeoUbicacionClient().getAddressLocalization(this.solicitud.getDireccionVenta());
		if(null == direccionLocal) {
			direccionLocal = new BeanDireccion();
		}
		solicitud.setCodigoBarrio(OracleHelper.isNullorEmpty(direccionLocal.getCodBarrio()) ? "N/A" : direccionLocal.getCodBarrio());
		solicitud.setBarrio(OracleHelper.isNullorEmpty(direccionLocal.getValueNomBarrio()) ? "NO Disponible" : direccionLocal.getValueNomBarrio());
		solicitud.setCodigoComuna(OracleHelper.isNullorEmpty(direccionLocal.getCodComuna()) ? "N/A" : direccionLocal.getCodComuna());
		solicitud.setComuna(OracleHelper.isNullorEmpty(direccionLocal.getValueNomComuna()) ? "NO Disponible" : direccionLocal.getValueNomComuna());

		return "";
	}

	public String checkAddressResidence() {
		direccionResidencia = getGeoUbicacionClient().getAddressLocalization(this.solicitud.getPersona().getDireccionResidencia());
		if(null == direccionResidencia) {
			direccionResidencia = new BeanDireccion();
		}
		solicitud.getPersona().setCodigoBarrio(OracleHelper.isNullorEmpty(direccionResidencia.getCodBarrio()) ? "N/A" : direccionResidencia.getCodBarrio());
		solicitud.getPersona().setBarrio(OracleHelper.isNullorEmpty(direccionResidencia.getValueNomBarrio()) ? "NO Disponible" : direccionResidencia.getValueNomBarrio());
		solicitud.getPersona().setCodigoComuna(OracleHelper.isNullorEmpty(direccionResidencia.getCodComuna()) ? "N/A" : direccionResidencia.getCodComuna());
		solicitud.getPersona().setComuna(OracleHelper.isNullorEmpty(direccionResidencia.getValueNomComuna()) ? "NO Disponible" : direccionResidencia.getValueNomComuna());

		return "";
	}

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- getters and setters init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public List getEstadoList() {
		return estadoList;
	}

	/**
	 * 
	 * @param estadoList
	 */
	public void setEstadoList(List estadoList) {
		this.estadoList = estadoList;
	}

	/**
	 * 
	 */
	public EstSocioEconomicoComp getEstSocioEconomicoSearch() {
		return estSocioEconomicoSearch;
	}

	/**
	 * 
	 * @param estSocioEconomicoSearch
	 */
	public void setestSocioEconomicoSearch(EstSocioEconomicoComp estSocioEconomicoSearch) {
		this.estSocioEconomicoSearch = estSocioEconomicoSearch;
	}

	/**
	 * 
	 * @return
	 */
	public DataModel getestSocioEconomicoListModel() {
		return estSocioEconomicoListModel;
	}

	/**
	 * 
	 * @param estSocioEconomicoListModel
	 */
	public void setestSocioEconomicoListModel(DataModel estSocioEconomicoListModel) {
		this.estSocioEconomicoListModel = estSocioEconomicoListModel;
	}

	/**
	 * 
	 * @return
	 */
	public EstSocioEconomicoComp getEstSocioEconomico() {
		return estSocioEconomico;
	}

	/**
	 * 
	 * @param estSocioEconomico
	 */
	public void setestSocioEconomico(EstSocioEconomicoComp estSocioEconomico) {
		this.estSocioEconomico = estSocioEconomico;
	}

	/**
	 * 
	 * @return
	 */
	public EstSocioEconomicoDetalleTO getEstSocioEconomicoDetalle() {
		return estSocioEconomicoDetalle;
	}

	/**
	 * 
	 * @param estSocioEconomicoDetalle
	 */
	public void setEstSocioEconomicoDetalle(
			EstSocioEconomicoDetalleTO estSocioEconomicoDetalle) {
		this.estSocioEconomicoDetalle = estSocioEconomicoDetalle;
	}

	/**
	 * obtencion del servicio estSocioEconomicoService
	 * 
	 * @return
	 */
	public IEstSocioEconomicoService getEstSocioEconomicoService() {
		return estSocioEconomicoService;
	}

	/**
	 * establecimiento del servicio estSocioEconomicoService, la inyeccion de la
	 * dependencia la cubre SpringFramework
	 * 
	 * @param estSocioEconomicoService
	 */
	public void setEstSocioEconomicoService(
			IEstSocioEconomicoService estSocioEconomicoService) {
		this.estSocioEconomicoService = estSocioEconomicoService;
	}
	
	public IEstCondViviendaService getEstCondViviendaService() {
		return estCondViviendaService;
	}

	public void setEstCondViviendaService(
			IEstCondViviendaService estCondViviendaService) {
		this.estCondViviendaService = estCondViviendaService;
	}

	public IEstAreaSocioeconoService getEstAreaSocioeconoService() {
		return estAreaSocioeconoService;
	}

	public void setEstAreaSocioeconoService(
			IEstAreaSocioeconoService estAreaSocioeconoService) {
		this.estAreaSocioeconoService = estAreaSocioeconoService;
	}

	public IEstOcupacionEpuService getEstOcupacionEpuService() {
		return estOcupacionEpuService;
	}

	public void setEstOcupacionEpuService(
			IEstOcupacionEpuService estOcupacionEpuService) {
		this.estOcupacionEpuService = estOcupacionEpuService;
	}

	public IEstSeguridadSocService getEstSeguridadSocService() {
		return estSeguridadSocService;
	}

	public void setEstSeguridadSocService(
			IEstSeguridadSocService estSeguridadSocService) {
		this.estSeguridadSocService = estSeguridadSocService;
	}
	
	public IEstAspecPoblacionalService getEstAspecPoblacionalService() {
		return estAspecPoblacionalService;
	}

	public void setEstAspecPoblacionalService(
			IEstAspecPoblacionalService estAspecPoblacionalService) {
		this.estAspecPoblacionalService = estAspecPoblacionalService;
	}
	
	public ISolicitudService getSolicitudService() {
		return solicitudService;
	}

	public void setSolicitudService(ISolicitudService solicitudService) {
		this.solicitudService = solicitudService;
	}

	public SolicitudComp getSolicitud() {
		return solicitud;
	}

	public void setSolicitud(SolicitudComp solicitud) {
		this.solicitud = solicitud;
	}

	public GeoUbicacionClient getGeoUbicacionClient() {
		return geoUbicacionClient;
	}

	public void setGeoUbicacionClient(GeoUbicacionClient geoUbicacionClient) {
		this.geoUbicacionClient = geoUbicacionClient;
	}

	public BeanDireccion getDireccionLocal() {
		return direccionLocal;
	}

	public void setDireccionLocal(BeanDireccion direccionLocal) {
		this.direccionLocal = direccionLocal;
	}

	public BeanDireccion getDireccionResidencia() {
		return direccionResidencia;
	}

	public void setDireccionResidencia(BeanDireccion direccionResidencia) {
		this.direccionResidencia = direccionResidencia;
	}

	// --------------------------------------------------------------------
	// --- getters and setters end()
	// --------------------------------------------------------------------

	/**
	 * NOTA:
	 * Este metodo no efectua ninguna actualizacion en la base de datos
	 * @return
	 */
	public String updateDetailEstPersona() {
		String msg = AppConstants.DEFAULT_ERROR;
		//En este punto debemos guardar la informacion de personas.
		//Que sea susceptible a ser modificada
		
		//Cargamos la informacion del siguiente paso si existe
		EstCondVivienda estCondVivienda = null;
		try {
			//consultamos si existe un registro de EstCondVivienda
			//para la solicitud de estudio socio economico 
			//que se esta gestionando
			estCondVivienda = getEstCondViviendaService().getByIdSolicitud(getEstSocioEconomico().getId().longValue());
			if(estCondVivienda != null){	
				getEstSocioEconomicoDetalle().setEstCondVivienda(estCondVivienda);
				//Establecer valores para comboBox
				//Valores para tipo de servicios publicos
				this.getEstSocioEconomicoDetalle().setServicioPublicoCheckItem(stringToStringArray(getEstSocioEconomicoDetalle().getEstCondVivienda().getServicioPublico()));
			}else{
				getEstSocioEconomicoDetalle().setEstCondVivienda(new EstCondVivienda());
				this.getEstSocioEconomicoDetalle().setServicioPublicoCheckItem(new String[0]);
			}
		} catch (EstCondViviendaException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstCondViviendaRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		
		//Establezco el indicador del siguiente paso
		getEstSocioEconomicoDetalle().getEstCondVivienda().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		getEstSocioEconomicoDetalle().setOpcion("2");
		return AppConstants.EST_PERSONA_SEARCH_VIEW;
	}
	
	/**
	 * 
	 * @return
	 */
	public String updateDetailEstCondVivienda() {
		String msg = AppConstants.DEFAULT_ERROR;

		try {
			//Ingresamos o actualizamos los valores de las condiciones vivienda 
			//para la solicitud de estudio socio economico 
			//que se esta gestionando
			if (this.getEstSocioEconomicoDetalle().getEstCondVivienda().getId() == null) {
				//Asignacion de valores checkBox
				getEstSocioEconomicoDetalle().getEstCondVivienda().setServicioPublico(stringArrayToString(getEstSocioEconomicoDetalle().getServicioPublicoCheckItem()));
				//Si NO existe identificador es una operacion create
				getEstCondViviendaService().insert(getEstSocioEconomicoDetalle().getEstCondVivienda());
				msg = AppConstants.SUCCESS_CREATE;
			}else{
				//Asignacion de valores checkBox
				getEstSocioEconomicoDetalle().getEstCondVivienda().setServicioPublico(stringArrayToString(getEstSocioEconomicoDetalle().getServicioPublicoCheckItem()));
				//Si existe identificador es una operacion update
				getEstCondViviendaService().update(getEstSocioEconomicoDetalle().getEstCondVivienda());
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (EstCondViviendaException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstCondViviendaRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		
		//Cargamos la informacion del siguiente paso si existe
		EstAreaSocioecono estAreaSocioecono = null;
		try {
			estAreaSocioecono = getEstAreaSocioeconoService().getByIdSolicitud(getEstSocioEconomico().getId().longValue());
			if(estAreaSocioecono != null){				
				getEstSocioEconomicoDetalle().setEstAreaSocioecono(estAreaSocioecono);
				//Establece la informacion de combos en el respectivo array
				getEstSocioEconomicoDetalle().setRazonVentaEpuCheckBoxItem(stringToStringArray(estAreaSocioecono.getRazonVentaEpu()));
			}else{
				getEstSocioEconomicoDetalle().setEstAreaSocioecono(new EstAreaSocioecono());
				getEstSocioEconomicoDetalle().setRazonVentaEpuCheckBoxItem(new String[0]);
			}
		} catch (EstAreaSocioeconoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstAreaSocioeconoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		
		getEstSocioEconomicoDetalle().getEstAreaSocioecono().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		getEstSocioEconomicoDetalle().setOpcion("3");
		return AppConstants.EST_COND_VIVIENDA_SEARCH_VIEW;
	}
	
	/**
	 * 
	 * @return
	 */
	public String cancelDetailEstCondVivienda() {
		String msg = AppConstants.DEFAULT_ERROR;
		getEstSocioEconomicoDetalle().setOpcion("1");
		return AppConstants.EST_COND_VIVIENDA_CANCEL_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateDetailEstAreaSocioecono() {
		String msg = AppConstants.DEFAULT_ERROR;

		try {
			if (this.getEstSocioEconomicoDetalle().getEstAreaSocioecono().getId() == null) {
				//Aplicar valores de comboBox
				getEstSocioEconomicoDetalle().getEstAreaSocioecono().setRazonVentaEpu(stringArrayToString(getEstSocioEconomicoDetalle().getRazonVentaEpuCheckBoxItem()));
				getEstAreaSocioeconoService().insert(getEstSocioEconomicoDetalle().getEstAreaSocioecono());
				msg = AppConstants.SUCCESS_CREATE;
			}else{
				//Aplicar valores de comboBox
				getEstSocioEconomicoDetalle().getEstAreaSocioecono().setRazonVentaEpu(stringArrayToString(getEstSocioEconomicoDetalle().getRazonVentaEpuCheckBoxItem()));
				getEstAreaSocioeconoService().update(getEstSocioEconomicoDetalle().getEstAreaSocioecono());
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (EstAreaSocioeconoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstAreaSocioeconoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}

		//Consultamos la informacion del registro del siguiente paso
		EstOcupacionEpu estOcupacionEpu = null;
		try {
			estOcupacionEpu = getEstOcupacionEpuService().getByIdSolicitud(getEstSocioEconomico().getId().longValue());
			if(estOcupacionEpu != null){
				getEstSocioEconomicoDetalle().setEstOcupacionEpu(estOcupacionEpu);
			}else{
				getEstSocioEconomicoDetalle().setEstOcupacionEpu(new EstOcupacionEpu());
			}
		} catch (EstOcupacionEpuException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstOcupacionEpuRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		
		getEstSocioEconomicoDetalle().setOpcion("4");
		getEstSocioEconomicoDetalle().getEstOcupacionEpu().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		return AppConstants.EST_AREA_SOCIOECONO_SEARCH_VIEW;
	}	
	
	/**
	 * 
	 * @return
	 */
	public String cancelDetailEstAreaSocioecono() {
		String msg = AppConstants.DEFAULT_ERROR;
		getEstSocioEconomicoDetalle().setOpcion("2");
		return AppConstants.EST_AREA_SOCIOECONO_CANCEL_VIEW;
	}	

	/**
	 * 
	 * @return
	 */
	public String updateDetailEstOcupacionEpu() {
		String msg = AppConstants.DEFAULT_ERROR;

		try {
			if (this.getEstSocioEconomicoDetalle().getEstOcupacionEpu().getId() == null) {
				getEstOcupacionEpuService().insert(getEstSocioEconomicoDetalle().getEstOcupacionEpu());
				msg = AppConstants.SUCCESS_CREATE;
			}else{
				getEstOcupacionEpuService().update(getEstSocioEconomicoDetalle().getEstOcupacionEpu());
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (EstOcupacionEpuException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstOcupacionEpuRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}

		//Consultamos el registro del siguiente paso
		try {
			EstSeguridadSoc estSeguridadSoc = null;
			estSeguridadSoc = getEstSeguridadSocService().getByIdSolicitud(getEstSocioEconomico().getId().longValue());
			if (estSeguridadSoc != null){
				this.getEstSocioEconomicoDetalle().setEstSeguridadSoc(estSeguridadSoc);
			}else{
				this.getEstSocioEconomicoDetalle().setEstSeguridadSoc(new EstSeguridadSoc());
			}
		} catch (EstSeguridadSocException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstSeguridadSocRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		
		getEstSocioEconomicoDetalle().setOpcion("5");
		getEstSocioEconomicoDetalle().getEstSeguridadSoc().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		return AppConstants.EST_OCUPACION_EPU_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String cancelDetailEstOcupacionEpu() {
		String msg = AppConstants.DEFAULT_ERROR;
		getEstSocioEconomicoDetalle().setOpcion("3");
		getEstSocioEconomicoDetalle().getEstAreaSocioecono().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		return AppConstants.EST_OCUPACION_EPU_CANCEL_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateDetailEstSeguridadSoc() {
		String msg = AppConstants.DEFAULT_ERROR;

		try {
			if (this.getEstSocioEconomicoDetalle().getEstSeguridadSoc().getId() == null) {
				getEstSeguridadSocService().insert(this.getEstSocioEconomicoDetalle().getEstSeguridadSoc());
				msg = AppConstants.SUCCESS_CREATE;
			}else{
				getEstSeguridadSocService().update(this.getEstSocioEconomicoDetalle().getEstSeguridadSoc());
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (EstSeguridadSocException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstSeguridadSocRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}

		//Consultamos los datos del siguiente paso
		try {
			EstAspecPoblacional estAspecPoblacional = null;
			estAspecPoblacional = getEstAspecPoblacionalService().getByIdSolicitud(getEstSocioEconomico().getId().longValue());
			if(estAspecPoblacional != null){
				this.getEstSocioEconomicoDetalle().setEstAspecPoblacional(estAspecPoblacional);
			}else{
				this.getEstSocioEconomicoDetalle().setEstAspecPoblacional(new EstAspecPoblacional());
			}
		} catch (EstAspecPoblacionalException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstAspecPoblacionalRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}

		getEstSocioEconomicoDetalle().setOpcion("6");
		getEstSocioEconomicoDetalle().getEstAspecPoblacional().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		return AppConstants.EST_SEGURIDAD_SOC_SEARCH_VIEW;
	}	
	
	/**
	 * 
	 * @return
	 */
	public String cancelDetailEstSeguridadSoc() {
		String msg = AppConstants.DEFAULT_ERROR;
		getEstSocioEconomicoDetalle().setOpcion("4");
		getEstSocioEconomicoDetalle().getEstOcupacionEpu().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		return AppConstants.EST_SEGURIDAD_SOC_CANCEL_VIEW;
	}	

	/**
	 * 
	 * @return
	 */
	public String updateDetailEstAspecPoblacional() {
		String msg = AppConstants.DEFAULT_ERROR;

		try {
			if (this.getEstSocioEconomicoDetalle().getEstAspecPoblacional().getId() == null) {
				getEstAspecPoblacionalService().insert(this.getEstSocioEconomicoDetalle().getEstAspecPoblacional());
				msg = AppConstants.SUCCESS_CREATE;
			}else{
				getEstAspecPoblacionalService().update(this.getEstSocioEconomicoDetalle().getEstAspecPoblacional());
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (EstAspecPoblacionalException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstAspecPoblacionalRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}

		//Consultamos la informacion del siguiente paso
		try {
			EstSeguridadSoc estSeguridadSoc = null;
			estSeguridadSoc = getEstSeguridadSocService().getByIdSolicitud(getEstSocioEconomico().getId().longValue());
			if(estSeguridadSoc != null){
				this.getEstSocioEconomicoDetalle().setEstSeguridadSoc(estSeguridadSoc);
			}else{
				this.getEstSocioEconomicoDetalle().setEstSeguridadSoc(new EstSeguridadSoc());
			}
		} catch (EstSeguridadSocException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstSeguridadSocRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		
		getEstSocioEconomicoDetalle().setOpcion("7");
		return AppConstants.EST_ASPEC_POBLACIONAL_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String cancelDetailEstAspecPoblacional() {
		String msg = AppConstants.DEFAULT_ERROR;
		getEstSocioEconomicoDetalle().setOpcion("5");
		return AppConstants.EST_ASPEC_POBLACIONAL_CANCEL_VIEW;
	}

	/**
	 * Se establece el estado final del estudio socio economico 
	 * valorado, los posibles valores que pueden asociarse
	 * por medio de este metodo son:
	 * <ul>
	 * 	<li>Nuevo</li> 
	 * 	<li>Pendiente</li> 
	 * 	<li>Actualizado</li>
	 * 	<li>Cerrado</li>
	 * </ul>
	 * @return
	 */
	public String updateDetailEstFinalizar() {
		String msg = AppConstants.DEFAULT_ERROR;
		getEstSocioEconomicoDetalle().setOpcion("1");
		cleanSearchValues();
		cleanValues();
		msg = AppConstants.SUCCESS_UPDATE;
		((MessageModalWindowController) getBean("messageController"))
		.setSuccessMessage("- Estudio Socio Econ\u00F3mico " + msg, null, null);
		return AppConstants.EST_FINALIZAR_SEARCH_VIEW;
	}
	
	/**
	 * Se establece el estado final del estudio socio economico 
	 * valorado, los posibles valores que pueden asociarse
	 * por medio de este metodo son:
	 * <ul>
	 * 	<li>Nuevo</li> 
	 * 	<li>Pendiente</li> 
	 * 	<li>Actualizado</li>
	 * 	<li>Cerrado</li>
	 * </ul>
	 * @return
	 */
	public String cancelDetailEstFinalizar() {
		String msg = AppConstants.DEFAULT_ERROR;
		getEstSocioEconomicoDetalle().setOpcion("6");
		return AppConstants.EST_FINALIZAR_CANCEL_VIEW;
	}
	
	/**
	 * Se sale del proceso para diligenciar el estudio
	 * socioeconomico en cualquiera de los pasos mediante el
	 * boton cancelar parte inferior opcion funcional
	 * @return
	 */
	public String cancelEst() {
		cleanSearchValues();
		cleanValues();
		getEstSocioEconomicoDetalle().setOpcion("1");
		return AppConstants.EST_SOCIO_ECONOMICO_SEARCH_VIEW;
	}

	// --------------------------------------------------------------------
	// --- metodos para atender acciones end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion init()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion end()
	// --------------------------------------------------------------------

}
